/**
 * 广告相关接口
 */

import { getApiBaseUrl } from "@/utils/env";

const BASE_URL = getApiBaseUrl();

/**
 * 获取广告配置
 * @returns {Promise}
 */
export function getAdConfig() {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `${BASE_URL}/api/config/ads`,
      method: "GET",
      success: (res) => {
        if (res.statusCode === 200) {
          // 后端可能返回两种格式：
          // 1. 包装格式: { code: 200, message: 'success', data: { banner: {...}, ... } }
          // 2. 直接格式: { banner: {...}, interstitial: {...}, ... }
          const response = res.data;

          // 检查是否是包装格式
          if (
            response &&
            typeof response === "object" &&
            response.code === 200 &&
            response.data
          ) {
            // 包装格式
            resolve({
              code: 200,
              data: response.data,
            });
          } else if (response && typeof response === "object") {
            // 直接格式
            resolve({
              code: 200,
              data: response,
            });
          } else {
            reject(new Error("响应数据格式错误"));
          }
        } else {
          reject(new Error(`请求失败: ${res.statusCode}`));
        }
      },
      fail: (err) => {
        reject(err);
      },
    });
  });
}

/**
 * 记录广告展示
 * @param {Object} params 请求参数
 * @param {string} params.type 广告类型
 * @param {string} params.adUnitId 广告位ID
 * @returns {Promise}
 */
export function recordAdShow(params) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `${BASE_URL}/api/ads/show`,
      method: "POST",
      data: {
        platform: getPlatform(), // 添加平台标识
        adType: params.type,
        adUnitId: params.adUnitId,
        timestamp: Date.now(),
      },
      success: (res) => {
        if (res.statusCode === 200) {
          const response = res.data;
          if (response.code === 200) {
            resolve(response.data);
          } else {
            // 广告统计失败不影响主流程，只记录错误
            console.warn("广告统计失败:", response.message);
            resolve({ success: false });
          }
        } else {
          resolve({ success: false });
        }
      },
      fail: (err) => {
        // 广告统计失败不影响主流程
        console.warn("广告统计请求失败:", err);
        resolve({ success: false });
      },
    });
  });
}

// 获取平台标识
function getPlatform() {
  // #ifdef MP-WEIXIN
  return "mp-weixin";
  // #endif
  // #ifdef H5
  return "h5";
  // #endif
  // #ifdef APP-PLUS
  return "app-plus";
  // #endif
  return "unknown";
}

/**
 * 记录广告点击
 * @param {Object} params 请求参数
 * @param {string} params.type 广告类型
 * @param {string} params.adUnitId 广告位ID
 * @returns {Promise}
 */
export function recordAdClick(params) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `${BASE_URL}/api/ads/click`,
      method: "POST",
      data: {
        platform: getPlatform(), // 添加平台标识
        adType: params.type,
        adUnitId: params.adUnitId,
        timestamp: Date.now(),
      },
      success: (res) => {
        if (res.statusCode === 200) {
          const response = res.data;
          if (response.code === 200) {
            resolve(response.data);
          } else {
            // 广告统计失败不影响主流程，只记录错误
            console.warn("广告统计失败:", response.message);
            resolve({ success: false });
          }
        } else {
          resolve({ success: false });
        }
      },
      fail: (err) => {
        // 广告统计失败不影响主流程
        console.warn("广告统计请求失败:", err);
        resolve({ success: false });
      },
    });
  });
}
